home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 48 / PC Gamer IT CD 48 2-2.iso / Starsiege / tribesdemo.exe / Disk1 / data1.cab / Tribes_Demo / base / scripts.vol / Mine.cs < prev    next >
Encoding:
Text File  |  1999-09-14  |  2.8 KB  |  113 lines

  1. //----------------------------------------------------------------------------
  2. // MINE DYNAMIC DATA
  3.  
  4. MineData AntipersonelMine
  5. {
  6.     className = "Mine";
  7.    description = "Antipersonel Mine";
  8.    shapeFile = "mine";
  9.    shadowDetailMask = 4;
  10.    explosionId = mineExp;
  11.     explosionRadius = 10.0;
  12.     damageValue = 0.65;
  13.     damageType = $MineDamageType;
  14.     kickBackStrength = 150;
  15.     triggerRadius = 2.5;
  16.     maxDamage = 0.5;
  17.     shadowDetailMask = 0;
  18.     destroyDamage = 1.0;
  19.     damageLevel = {1.0, 1.0};
  20. };
  21.  
  22. function AntipersonelMine::onAdd(%this)
  23. {
  24.     %this.damage = 0;
  25.     AntipersonelMine::deployCheck(%this);
  26. }
  27.  
  28. function AntipersonelMine::onCollision(%this,%object)
  29. {
  30.     %type = getObjectType(%object);
  31.     %data = GameBase::getDataName(%this);
  32.     if ((%type == "Player" || %data == AntipersonelMine || %data == Vehicle || %type == "Moveable") &&
  33.             GameBase::isActive(%this)) 
  34.         GameBase::setDamageLevel(%this, %data.maxDamage);
  35. }
  36.  
  37. function AntipersonelMine::deployCheck(%this)
  38. {
  39.     if (GameBase::isAtRest(%this)) {
  40.         GameBase::playSequence(%this,1,"deploy");
  41.          GameBase::setActive(%this,true);
  42.         %set = newObject("set",SimSet);
  43.         if(1 != containerBoxFillSet(%set,$MineObjectType,GameBase::getPosition(%this),1,1,1,0)) {
  44.             %data = GameBase::getDataName(%this);
  45.             GameBase::setDamageLevel(%this, %data.maxDamage);
  46.         }
  47.         deleteObject(%set);
  48.     }
  49.     else 
  50.         schedule("AntipersonelMine::deployCheck(" @ %this @ ");", 3, %this);
  51. }    
  52.  
  53. function AntipersonelMine::onDestroyed(%this)
  54. {
  55.     $TeamItemCount[GameBase::getTeam(%this) @ "mineammo"]--;
  56. }
  57.  
  58. function AntipersonelMine::onDamage(%this,%type,%value,%pos,%vec,%mom,%object)
  59. {
  60.    if (%type == $MineDamageType)
  61.       %value = %value * 0.25;
  62.  
  63.     %data = GameBase::getDataName(%this);
  64.     if((%data.maxDamage/1.5) < %this.damage+%value) 
  65.         GameBase::setDamageLevel(%this, %data.maxDamage);
  66.     else 
  67.         %this.damage += %value;
  68. }
  69.  
  70. //----------------------------------------------------------------------------
  71.  
  72. MineData Handgrenade
  73. {
  74.    mass = 0.3;
  75.    drag = 1.0;
  76.    density = 2.0;
  77.     elasticity = 0.15;
  78.     friction = 1.0;
  79.     className = "Handgrenade";
  80.    description = "Handgrenade";
  81.    shapeFile = "grenade";
  82.    shadowDetailMask = 4;
  83.    explosionId = grenadeExp;
  84.     explosionRadius = 10.0;
  85.     damageValue = 0.5;
  86.     damageType = $ShrapnelDamageType;
  87.     kickBackStrength = 100;
  88.     triggerRadius = 0.5;
  89.     maxDamage = 2;
  90. };
  91.  
  92. function Handgrenade::onAdd(%this)
  93. {
  94.     %data = GameBase::getDataName(%this);
  95.     schedule("Mine::Detonate(" @ %this @ ");",2.0,%this);
  96. }
  97.  
  98. function Mine::onDamage(%this,%type,%value,%pos,%vec,%mom,%object)
  99. {
  100.    if (%type == $MineDamageType)
  101.       %value = %value * 0.25;
  102.  
  103.     %damageLevel = GameBase::getDamageLevel(%this);
  104.     GameBase::setDamageLevel(%this,%damageLevel + %value);
  105. }
  106.  
  107. function Mine::Detonate(%this)
  108. {
  109.     %data = GameBase::getDataName(%this);
  110.     GameBase::setDamageLevel(%this, %data.maxDamage);
  111. }
  112.  
  113.